<?php
/**
 * 用户收藏接口
 */
namespace service\service;

use service\ext\PageData;
use service\vo\user\UserCollect;

interface UserCollectService
{
    const ERROR_USER_COLLECT_NOT_EXISTS = 'ERROR_USER_COLLECT_NOT_EXISTS';  //数据不存在

    /**
     * 添加用户收藏
     * @param UserCollect $userCollect  用户收藏对象
     * @return int  新增加的id
     */
    public function addUserCollect(UserCollect $userCollect) : int;

    /**
     * 批量添加用户收藏
     * @param array $userCollects   用户收藏对象集合
     * @return int  返回添加成功的条数
     */
    public function addUserCollects(array $userCollects) : int;

    /**
     * 删除用户收藏
     * @param int $id 用户收藏的id
     * @return int  影响的行数
     */
    public function deleteUserCollect(int $id) : int;

    /**
     * 批量删除用户收藏
     * @param array $ids    收藏的id集合
     * @return int  影响的行数
     */
    public function deleteUserCollects(array $ids) : int;

    /**
     * 删除用户下的所有收藏
     * @param int $userId   用户id
     * @return int  影响的行数
     */
    public function deleteUserCollectByUserId(int $userId) : int;

    /**
     * 删除多个用户下的所有收藏
     * @param array $userIds    用户id集合
     * @return int  影响的行数
     */
    public function deleteUserCollectByUserIds(array $userIds) : int;

    /**
     * 删除题目下所有用户的收藏
     * @param int $subjectId    题目id
     * @return int  影响的行数
     */
    public function deleteUserCollectBySubjectId(int $subjectId) : int;

    /**
     * 删除多个题目下所有用户的收藏
     * @param array $subjectIds 题目id集合
     * @return int  影响的行数
     */
    public function deleteUserCollectBySubjectIds(array $subjectIds) : int;

    /**
     * 根据id获取收藏详情
     * @param int $id
     * @return UserCollect
     *
     * @throws
     *  ERROR_USER_COLLECT_NOT_EXISTS
     */
    public function getUserCollectById(int $id) : UserCollect;

    /**
     * 根据id集合获取收藏列表
     * @param array $ids    收藏的id集合
     * @return array
     */
    public function getUserCollectByIds(array $ids) : array;

    /**
     * 搜索用户收藏
     * @param int $currentPage 当前页
     * @param int $pageSize 每页显示数量
     * @param array $filterCriteria //搜索条件数组，其中的value是搜索值，其中的key从下面字符串中取
     *        'UserId'            =>    用户id
     *        'SubjectId'            =>    题目id
     *        'AddTime'        =>    时间，array('start'=>'开始时间','end'=>'结束时间')
     * @param array $sorterCriteria //排序条件，其中的value是搜索值，其中的key从下面字符串中取
     *        'ID'    =>    true为升序false为降序
     *
     * @return PageData
     */
    public function searchUserCollects(int $currentPage, int $pageSize, array $filterCriteria, array $sorterCriteria): PageData;
}